//导入工具包 require('node_modules里对应模块')
// 删除所有的包 借助rimraf：npm install rimraf -g 用法：rimraf node_modules
var gulp = require('gulp'), //本地安装gulp所用到的地方
    less = require('gulp-less'),
    imagemin = require('gulp-imagemin'),
    pngquant = require('imagemin-pngquant'),
    cleanCSS = require('gulp-clean-css'), // css 压缩
    rename = require('gulp-rename'),
    cached = require('gulp-cached'), // 缓存文件到内存中，只传送修改的文件
    cache = require('gulp-cache'), // 缓存图片
    uglify = require('gulp-uglify'),
    concat = require('gulp-concat'),
    jshint = require('gulp-jshint'),
    rev = require('gulp-rev'), // - 对文件名加MD5后缀
    sequence = require('gulp-sequence'), // 设置任务是串行执行还是并行执行，中括号并行，圆括号串行
    revCollector = require('gulp-rev-collector'); // - 路径替换
    plumber = require('gulp-plumber'),//出现异常并不终止watch事件（gulp-plumber）
    notify = require('gulp-notify'),
    sass = require('gulp-sass');


//定义一个testLess任务（自定义任务名称）
gulp.task('testLess', function () {
    gulp.src('src/less/index.less') //该任务针对的文件
        .pipe(less()) //该任务调用的模块
        .pipe(gulp.dest('src/css')); //将会在src/css下生成index.css
});
gulp.task("sass", function () {
  gulp.src("src/sass/*.scss")
    .pipe(sass({
        outputStyle: 'expanded'
    }))
    // .pipe(autoprefixer("last 1 version"))
    .pipe(gulp.dest("src/css"));
});
gulp.task("default", function() {
  gulp.run("sass");
  // gulp.run("less");
  gulp.watch("src/sass/*.scss", function() {
    gulp.run("sass");
  });
  // gulp.watch("src/less/*.less", function() {
  //   gulp.run("less");
  // });
});
// 压缩图片
gulp.task('img',function(){
    var imgSrc = './src/img/**/*',
        imgDst = './dist/img';
    return gulp.src(imgSrc)  //,'img/**/*.{png,jpg,gif,ico}'
        .pipe(cache(imagemin({
            optimizationLevel: 5, //类型：Number  默认：3  取值范围：0-7（优化等级）
            progressive:true,   //类型：Boolean 默认：false 无损压缩jpg图片
            interlaced: true,
            // svgoPlugins:[{removeViewBox:false}], //不要移除svg的viewbox属性
            use: [pngquant()] //使用pngquant深度压缩png图片的imagemin插件
        })))
        .pipe(gulp.dest(imgDst));
});
gulp.task('clear', function () {
    cached.caches = {};// 清除gulp-cached的缓存
    cache.clearAll(); // 清除gulp-cache的缓存
});
gulp.task('img', function() {
    var imgSrc = './src/img/v40/*',
        imgDst = './dist/img/v40';
    return gulp.src(imgSrc)
        .pipe(plumber({errorHandler:notify.onError('Error:<%= error.message %>')}))
        .pipe(cache(imagemin({
            optimizationLevel: 3, // 类型：Number  默认：3  取值范围：0-7（优化等级）
            progressive: true, // 类型：Boolean 默认：false 无损压缩jpg图片
            interlaced: true,
            svgoPlugins: [{removeViewBox: false}], // 不要移除svg的viewbox属性
            use: [pngquant()] // 使用pngquant深度压缩png图片的imagemin插件
        })))
        .pipe(gulp.dest(imgDst));
		// cache()
});
/**
 * 公用css样式压缩合并（不需要加MD5版本号，更新不需要改模板）
 */
gulp.task('css-common', function () {
    var cssSrc = [
            './src/css/base.css',
            './src/css/common.css'
        ],
        cssDst = './dist/css';
    return gulp.src(cssSrc)
        // .pipe(cached('css-common'))
        // .pipe(autoprefixer())
        // .pipe(remember('css-common'))
        .pipe(concat('common.css'))
        .pipe(rename({suffix: '.min'}))
        .pipe(cleanCSS())
        .pipe(gulp.dest(cssDst));
    // .pipe(reload({stream:true}));
});
gulp.task('css-6', function () {
    var cssSrc = [
            './src/css/reset.css',
            './src/css/redPocket.css'
        ],
        cssDst = './dist/css';
    return gulp.src(cssSrc)
        // .pipe(cached('css-common'))
        // .pipe(autoprefixer())
        // .pipe(remember('css-common'))
        .pipe(concat('page_6.css'))
        .pipe(rename({suffix: '.min'}))
        .pipe(cleanCSS())
        .pipe(gulp.dest(cssDst));
    // .pipe(reload({stream:true}));
});
gulp.task('css-page', function () {
    var cssSrc = [
            './src/css/page_redpackageh5.css',
            './src/css/page_redpackage.css'
        ],
        cssDst = './dist/css';
    return gulp.src(cssSrc)
        // .pipe(cached('css-common'))
        // .pipe(autoprefixer())
        // .pipe(remember('css-common'))
        .pipe(rename({suffix: '.min'}))
        .pipe(cleanCSS())
        .pipe(rev())
        .pipe(gulp.dest(cssDst))
        .pipe(rev.manifest())
        .pipe(gulp.dest('rev/css'));
    // .pipe(reload({stream:true}));
});
gulp.task('css-redpackageh5', function () {
    var cssSrc = [
            './src/css/page_redpackageh5.css'
        ],
        cssDst = './dist/css';
    return gulp.src(cssSrc)
        // .pipe(cached('css-common'))
        // .pipe(autoprefixer())
        // .pipe(remember('css-common'))
        .pipe(rename({suffix: '.min'}))
        .pipe(cleanCSS())
        .pipe(rev())
        .pipe(gulp.dest(cssDst))
        .pipe(rev.manifest())
        .pipe(gulp.dest('rev/css'));
    // .pipe(reload({stream:true}));
});
gulp.task('css-redpackage', function () {
    var cssSrc = [
            './src/css/page_redpackage.css'
        ],
        cssDst = './dist/css';
    return gulp.src(cssSrc)
        // .pipe(cached('css-common'))
        // .pipe(autoprefixer())
        // .pipe(remember('css-common'))
        .pipe(rename({suffix: '.min'}))
        .pipe(cleanCSS())
        .pipe(rev())
        .pipe(gulp.dest(cssDst))
        .pipe(rev.manifest())
        .pipe(gulp.dest('rev/css'));
    // .pipe(reload({stream:true}));
});
gulp.task('js-superAlert', function () {
    var jsSrc = [
            'src/js/superAlert.js'
        ],
        jsDst = 'dist/js';

    gulp.src(jsSrc)
        .pipe(rename({suffix:'min'}))
        .pipe(uglify())
        .pipe(jshint())
        .pipe(rev())
        .pipe(gulp.dest(jsDst))
        // .pipe(rev.manifest({
        //     base:'rev/js',
        //     merge:true
        // }))
        // .pipe(gulp.dest('rev/js'));
        .pipe(rev.manifest({
            path:'rev/js',
            merge:true
        }))
        .pipe(gulp.dest('./'));
    // .pipe(reload({stream:true}));
});
gulp.task('js-responsive', function () {
    var jsSrc = [
            'src/js/responsive.js'
        ],
        jsDst = 'dist/js';

    gulp.src(jsSrc)
        .pipe(rename({suffix:'min'}))
        .pipe(uglify())
        .pipe(jshint())
        .pipe(rev())
        .pipe(gulp.dest(jsDst))
        // .pipe(rev.manifest({
        //     base:'rev/js',
        //     merge:true
        // }))
        // .pipe(gulp.dest('rev/js'));
        .pipe(rev.manifest({
            path:'rev/js',
            merge:true
        }))
        .pipe(gulp.dest('./'));
    // .pipe(reload({stream:true}));
});
gulp.task('js-rev-responsive',sequence('js-responsive','rev'));
gulp.task('js-rev-test',sequence(['js-responsive','js-superAlert'],'rev'));
gulp.task('js-redpackage', ['js-copy'], function () {
    var jsSrc = [
            './src/js/entry.js',
            './src/js/totalmoney.js',
            './src/js/superAlert.js',
            './src/js/socket.io.js',
            './src/js/pomeloclient.js',
            './src/js/md5.min.js',
            './src/js/fastclick.min.js',
            './src/js/page_redpackage.js'
        ],
        jsDst = './dist/js/';

    gulp.src(jsSrc)
        .pipe(concat('redpackage.all.js'))
        .pipe(uglify())
        .pipe(jshint())
        .pipe(rev())
        .pipe(gulp.dest(jsDst))
        // .pipe(rev.manifest({
        //     base:'rev/js',
        //     merge:true
        // }))
        // .pipe(gulp.dest('rev/js'));
        .pipe(rev.manifest({
            path:'rev/js',
            merge:true
        }))
        .pipe(gulp.dest('rev/js'));
    // .pipe(reload({stream:true}));
});
gulp.task('js-copy', function () {
    // 复制js到dist目录
    gulp.src('./src/js/jquery-3.2.1.min.js')
        .pipe(gulp.dest('./dist/js'));
});
gulp.task('js-redpackageh5', function () {
    var jsSrc = [
            './src/js/jquery-3.2.1.min.js',
            './src/js/fastclick.min.js',
            './src/js/page_redpackageh5.js'
        ],
        jsDst = './dist/js/';
    gulp.src(jsSrc)
        .pipe(concat('redpackageh5.all.js'))
        .pipe(uglify())
        // .pipe(jshint())
        // .pipe(jshint.reporter('default'))
        // .pipe(jshint.reporter(stylish)) //需要const stylish = require('jshint-stylish');
        .pipe(rev())
        .pipe(gulp.dest(jsDst))
        // .pipe(rev.manifest({
        //     base:'rev/js',
        //     merge:true
        // }))
        // .pipe(gulp.dest('rev/js'));
        .pipe(rev.manifest({
            path:'rev/js',
            merge:true
        }))
        .pipe(gulp.dest('rev/js'));
});
gulp.task('rev-redpackageh5', function () {
    var jsSrc = [
            './src/js/page_redpackageh5.js'
        ],
        jsDst = './dist/js/';
    gulp.src(jsSrc)
        .pipe(rename('redpackageh5.all.js'))
        .pipe(uglify())
        // .pipe(jshint())
        // .pipe(jshint.reporter('default'))
        // .pipe(jshint.reporter(stylish)) //需要const stylish = require('jshint-stylish');
        .pipe(rev())
        .pipe(gulp.dest(jsDst))
        .pipe(rev.manifest({
            // base:'./rev/js/rp', // 不能将文件写入到指定的目录
            path:'rev/js/rp/rev-manifest.json',// 不能将两个文件的对应关系同时写入json文件中路径必须有rev-manifest.json
            merge:true
        }))
        .pipe(gulp.dest('./'));
        // .pipe(rev.manifest({
        //     base:'rev/js',
        //     merge:true
        // }))
        // .pipe(gulp.dest('rev/js'));
        // .pipe(rev.manifest({
        //     path:'rev/js',
        //     merge:true
        // }))
        // .pipe(gulp.dest('rev/js'));
});
gulp.task('rev-redpackage', function () {
    var jsSrc = [
            './src/js/page_redpackage.js'
        ],
        jsDst = './dist/js/';
    gulp.src(jsSrc)
        .pipe(rename('redpackage.all.js'))
        .pipe(uglify())
        // .pipe(jshint())
        // .pipe(jshint.reporter('default'))
        // .pipe(jshint.reporter(stylish)) //需要const stylish = require('jshint-stylish');
        .pipe(rev())
        .pipe(gulp.dest(jsDst))
        .pipe(rev.manifest({
            // base:'./rev/js/rp', // 不能将文件写入到指定的目录
            path:'rev/js/rp/rev-manifest.json',// 不能将两个文件的对应关系同时写入json文件中路径必须有rev-manifest.json
            merge:true
        }))
        .pipe(gulp.dest('./'));
        // .pipe(rev.manifest({
        //     // base:'./rev/js/rp', // 不能将文件写入到指定的目录
        //     path:'rev/js/rp/rev-manifest.json',// 不能将两个文件的对应关系同时写入json文件中路径必须有rev-manifest.json
        //     merge:true
        // }))
        // .pipe(gulp.dest('./'));
});

gulp.task('rev', function () {
    var revDst = './rev/**/*.json',
        htmlSrc = './dist/*.html',
        htmlDst = './dist/';
    gulp.src([revDst, htmlSrc])
        .pipe(revCollector({
            replaceReved: true // 设置replaceReved标识, 用来说明模板中已经被替换的文件是否还能再被替换,默认是false
        })) // - 执行文件内css名的替换
        .pipe(gulp.dest(htmlDst)); // - 替换后的文件输出的目录
    // .pipe(reload({stream:true}));
});
gulp.task('rev-page',sequence(['rev-redpackage','rev-redpackageh5'],'rev'));
gulp.task('page-test', sequence('css-page','rev'));
// 站外H5
gulp.task('page-redpackageh5', sequence(['js-redpackageh5', 'css-common', 'css-redpackageh5'],'rev'));
// 站内H5
gulp.task('page-redpackage', sequence(['js-redpackage', 'css-common', 'css-redpackage','css-6'],'rev'));
// 'img',
gulp.task('page-all', sequence(['js-redpackage', 'js-redpackageh5', 'css-common', 'css-page', 'css-6'],'rev'));
// gulp.task('default',['testLess']); //定义默认任务 elseTask为其他任务，该示例没有定义elseTask任务

//gulp.task(name[, deps], fn) 定义任务  name：任务名称 deps：依赖任务名称 fn：回调函数
//gulp.src(globs[, options]) 执行任务处理的文件  globs：处理的文件路径(字符串或者字符串数组)
//gulp.dest(path[, options]) 处理完后文件生成路径